package com.shi.service.impl;

import com.alibaba.fastjson.JSONObject;
import com.shi.dao.ShiDao;
import com.shi.entity.Shi;
import com.shi.entity.ShiVO;
import com.shi.service.ShiService;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
/**
 * Shi的服务接口的实现类
 * 
 * @author 
 *
 */
@Service
public class ShiServiceImpl implements ShiService {
	private final Logger LOG = LogManager.getLogger(this.getClass());

	private  int num;

	@Autowired
	private ShiDao shiDao;
	// TODO 当你看到这个方法时你应该创建一个工具类做通用的方法,定义自己的返回格式化
	private static final int C200 = 200;
	private static final int C412 = 412;
	public String resultFormat(int code, Object data) {
		JSONObject result = new JSONObject();
		result.put("code", code);
		if (data != null) {
			result.put("data", data);
		}
		return result.toJSONString();
	}

	@Override
	public String find(ShiVO value) {
		//TODO这里可以做通过Assist做添加查询
		int pageNo = value.getPageNo();
		int pageSize = value.getPageSize();
		if(pageSize==0){
			pageSize=10;
		}
		value.setBegin(pageNo*pageSize);
		value.setOffset(pageSize);
		List<Shi> result = shiDao.selectShiByObj(value);
		if (LOG.isDebugEnabled()) {
			LOG.debug("执行获取Shi数据集-->结果:", result);
		}
		//LOG.info(++num);
		return resultFormat(C200, result);
	}

	@Override
	public String search(ShiVO value) {
		//TODO这里可以做通过Assist做添加查询
		int pageNo = value.getPageNo();
		int pageSize = value.getPageSize();
		value.setBegin(pageNo*pageSize);
		value.setOffset(pageSize);
		List<Shi> result = shiDao.search(value);
		if (LOG.isDebugEnabled()) {
			LOG.debug("执行获取Shi数据集-->结果:", result);
		}
		return resultFormat(C200, result);
	}
	@Override
	public String findOne(Integer id) {
		if (id == null) {
			if (LOG.isDebugEnabled()) {
				LOG.debug("执行通过Shi的id获得Shi对象-->失败:id不能为空");
			}
			return resultFormat(C412, null);
		}
		Shi result = shiDao.selectShiById(id);
		if (LOG.isDebugEnabled()) {
			LOG.debug("执行通过Shi的id获得Shi对象-->结果:", result);
		}
		return resultFormat(C200, result);
	}

	@Override
	public String saveNotNull(Shi value) {
		if (value == null) {
			if (LOG.isDebugEnabled()) {
				LOG.debug("执行将Shi中属性值不为null的数据保存到数据库-->失败:对象不能为空");
			}
			return resultFormat(C412, null);
		}
		if(value.getTitle() == null || value.getContent() == null || value.getAuthor() == null || value.getDynasty() == null  ){
			if (LOG.isDebugEnabled()) {
				LOG.debug("执行将Shi中属性值不为null的数据保存到数据库-->失败:存在不能为空的空值");
			}
			return resultFormat(C412, null);
		}
		int result = shiDao.insertNotNullShi(value);
		if (LOG.isDebugEnabled()) {
			LOG.debug("执行将Shi中属性值不为null的数据保存到数据库-->结果:", result);
		}
		return resultFormat(C200, result);
	}
	@Override
	public String updateNotNullById(Shi value) {
		if (value == null) {
			if (LOG.isDebugEnabled()) {
				LOG.debug("执行通过Shi的id更新Shi中属性不为null的数据-->失败:对象为null");
			}
			return resultFormat(C412, null);
		}
		int result = shiDao.updateNotNullShiById(value);
		if (LOG.isDebugEnabled()) {
			LOG.debug("执行通过Shi的id更新Shi中属性不为null的数据-->结果:", result);
		}
		return resultFormat(C200, result);
	}

	@Override
	public String deleteById(Integer id) {
		if (id == null) {
			if (LOG.isDebugEnabled()) {
				LOG.debug("执行通过Shi的id删除Shi-->失败:id不能为空");
			}
			return resultFormat(C412, null);
		}
		int result = shiDao.deleteShiById(id);
		if (LOG.isDebugEnabled()) {
			LOG.debug("执行通过Shi的id删除Shi-->结果:", result);
		}
		return resultFormat(C200, result);
	}


}